package com.uenpay.util.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Sax解析处理器
 */
public class SaxContentHandler extends DefaultHandler {

	private Map<String, String> string_map = new LinkedHashMap<String, String>();
	private String value;

	public Map<String, String> getMap() {
		String key, value = "";
		for (Map.Entry<String, String> entry : string_map.entrySet()) {
			key = entry.getKey();
			// 若为null，则置为""
			value = (entry.getValue() == null) ? "" : entry.getValue();
			value = (!"".equals(value)) ? value.trim() : value;
			string_map.put(key, value); 
		} 
		return string_map;
	}

	/**
	 * 用于处理文档解析开始事件
	 */
	@Override
	public void startDocument() throws SAXException {
	}

	@Override
	public void endDocument() throws SAXException {
	}

	/**
	 * 处理元素开始事件，从参数中可以获得元素所在名称空间的uri，元素名称，属性类表等信息
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
							 Attributes attributes) throws SAXException {
	}

	/**
	 * 处理元素结束事件
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		string_map.put(localName, value);
		value = ""; // 赋值之后要先清空
	}

	/**
	 * 处理元素的字符内容，从参数中可以获得内容
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);  
		value = new String(ch, start, length);
		// 若为null，则置为""
		value = (value == null) ? "" : value;
	}
}
